File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace BNG {
/// <summary>
/// Controls collision state of Hand Model.
/// </summary>
public class HandCollision : MonoBehaviour {
/// <summary>
/// Used to determine if pointing or gripping
/// </summary>
public HandController HandControl;
/// <summary>
/// Used to determine if Grabbing something
/// </summary>
public Grabber HandGrabber;
/// <summary>
/// If false we will not check for Hand Collision at all
/// </summary>
public bool EnableHandCollision = true;
/// <summary>
/// Should we enable hand colliders when pointing
/// </summary>
public bool EnableCollisionOnPoint = true;
/// <summary>
/// Should we enable hand colliders when making a fist
/// </summary>
public bool EnableCollisionOnFist = true;
/// <summary>
/// Should we enable hand colliders at all times (still respects EnableCollisionDuringGrab)
/// </summary>
public bool EnableCollisionOnAllPoses = false;
/// <summary>
/// Set to false to Disable Hand Colliders during grab or remote grab
/// </summary>
public bool EnableCollisionDuringGrab = false;
public float PointAmount;
public float GripAmount;
public bool MakingFist;
// Colliders to keep track of
List<Collider> handColliders;
void Start() {
handColliders = new List<Collider>();
var tempColliders = GetComponentsInChildren<Collider>(true);
// Only accept non-trigger colliders.
foreach(var c in tempColliders) {
if(!c.isTrigger) {
handColliders.Add(c);
}
}
}
void Update() {
if(!EnableHandCollision) {
return;
}
bool grabbing = HandGrabber != null && HandGrabber.HoldingItem;
bool makingFist = HandControl != null && HandControl.GripAmount > 0.9f && (HandControl.PointAmount < 0.1 || HandControl.PointAmount > 1);
MakingFist = makingFist;
PointAmount = HandControl != null ? HandControl.PointAmount : 0;
GripAmount = HandControl != null ? HandControl.GripAmount : 0;
bool pointing = HandControl != null && HandControl.PointAmount > 0.9f && HandControl.GripAmount > 0.9f;
for (int x = 0; x < handColliders.Count; x++) {
Collider col = handColliders[x];
// Immediately disable collider if no collision on grab
if (EnableCollisionDuringGrab == false && grabbing) {
col.enabled = false;
continue;
}
// Immediately disable collider if we just released an item.
// This is so we don't enable the collider right when we are trying to drop something
if(HandGrabber != null && (Time.time - HandGrabber.LastDropTime < 0.5f )) {
col.enabled = false;
continue;
}
bool enableCollider = false;
if (EnableCollisionDuringGrab && grabbing) {
enableCollider = true;
}
else if (EnableCollisionOnPoint && pointing) {
enableCollider = true;
}
else if (EnableCollisionOnFist && makingFist) {
enableCollider = true;
}
else if (EnableCollisionOnAllPoses) {
enableCollider = true;
}
col.enabled = enableCollider;
}
}
}
}